<?php
// +----------------------------------------------------------------------
// | IPHP
// +----------------------------------------------------------------------
// | This is an open source and simple PHP FrameWork.
// +----------------------------------------------------------------------
// | $Id$
// +----------------------------------------------------------------------

// URL解析类
namespace IPHP\Core;

if(!defined('IN_IPHP')) {
    exit('Access Denied'); 
}

class Router {

    /**
     * 解析url
     * 标准url格式为 模块名/控制器名/操作名/参数/值
     * @return [type] [description]
     */
    public function parseUrl() {
        $this->getVar();
        $controller_name = ucwords(strtolower(CONTROLLER_NAME));

        return array('module'=>MODULE_NAME, 'controller' => $controller_name, 'action' => strtolower(ACTION_NAME));
    }

    /**
     * 解析地址中的参数
     * @return [type] [description]
     */
    public function getVar() {
        $var = array();
        $url = trim($_SERVER['REQUEST_URI'],'/');
        if(false !== strpos($url,'?')) { 
            // 检查地址是否包含问号  
            $info = explode('/', trim($_SERVER['PATH_INFO'],'/'));
            // 如查存在pathinfo，则从pathinfo中取出控制名和操作名
            // 如果是pathinfo和querystring混写的方试，则pathinfo中必须包含完整的控制器我和操作名
            if($info) {
                // 发果存在 控制器名/操作名
                if(BIND_MODULE) {
                    define(MODULE_NAME,BIND_MODULE);                   
                } else {                   
                    define(MODULE_NAME,array_shift($info));
                }
                define(CONTROLLER_NAME,array_shift($info));
                define(ACTION_NAME,strtolower(array_shift($info)));                
            } else {
            // 如果不存在pathinfo ，则从querystring中取从控制器名和操作名
                $_GET['a'] ? define(ACTION_NAME,strtolower(htmlspecialchars(trim($_GET['a']))) ): define(ACTION_NAME,"index");
                define(CONTROLLER_NAME,htmlspecialchars(trim($_GET['c'])));
                BIND_MODULE ? define(MODULE_NAME,BIND_MODULE) : define(MODULE_NAME,htmlspecialchars(trim($_GET['m'])));
            }
        }elseif(strpos($url,'/')){ 
            // 地址中只包含/
            $info = explode('/', trim($_SERVER['PATH_INFO'],'/'));
            if(!BIND_MODULE) {
                if(empty($info[0])) {
                    define(MODULE_NAME,'Index');  
                    unset($info[0]);         
                } else {
                    define(MODULE_NAME,array_shift($info) );           
                }
            } else {
                define(MODULE_NAME,BIND_MODULE);
            }

            $controller_name = $info ? array_shift($info) : 'Index';
            $controller_name = ucwords($controller_name);
            define(CONTROLLER_NAME, $controller_name); 
            $info ? define(ACTION_NAME,strtolower( array_shift($info) ) ) : define(ACTION_NAME,"index"); 

            for ($i=0; $i < count($info); $i++) {
                $var[$info[$i]] = $info[$i+1];
                $i++;
            }

        }else{

            BIND_MODULE ? define(MODULE_NAME,BIND_MODULE) : define(MODULE_NAME, "Index");
            define(CONTROLLER_NAME,"Index");
            define(ACTION_NAME,"index");
            parse_str($url,$var);
        }

        $_GET = array_merge($_GET,$var);
    }

}